/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 言初
 * Date: 2023-12-25
 * Time: 22:13
 */
/*
给定一个整数数组 a 和一个整数目标值 k
请你在该数组中找出所有和为目标值 k  的整数对，并输出整数对的对数。

 */

import java.util.HashMap;
import java.util.List;
import java.util.Scanner;

public class Main3{
    public static void main(String[] args) {

        //输入
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int k=sc.nextInt();
        int[] arr=new int[n];

        for(int i=0;i<n;i++){
            arr[i]=sc.nextInt();
        }

        int num=0; // 记录对数
        //开始寻找
        num=func(arr,k);
        System.out.println(num);
    }

    public static int func(int[] arr,int k){
        //寻找对数
        int num=0;
        // 把arr数组放到hashmap中，key对应arr中的元素，value对应key值在arr数组中的个数。
        // 然后遍历arr数组，到map中去找是否存在 key+arr[i]==k 的 key
        // Key的值不可重复（当Key的值重复的时候，后面插入的对象会将之前插入的具有相同的Key值的对象覆盖掉），
        // Value的值可重复
        HashMap<Integer,Integer> map=new HashMap<>();
        int len=arr.length;

        //遍历一遍数组，把值以及他的个数放到map中
        for(int i=0;i<len;i++){
            // containsKey 判断一个key值是否在map中
            if(map.containsKey(arr[i])==true){
                // put 方法，把一个键值对放到map中
                map.put(arr[i],map.get(arr[i])+1);
                // get 方法，取出某个key值对应的value的值
            }else{
                map.put(arr[i],1);
            }
        }

        for (int i = 0; i < len; i++) {
            int ret=k-arr[i];
            if(map.containsKey(ret)==true){
                if(ret==arr[i] && map.get(ret)>1){

                    num+=map.get(ret)-1;
                }
                if(ret!=arr[i]){
                    num+=map.get(ret);
                }
            }
        }
        num/=2;
        //这里除以2，是因为把类似于【4，1】和【1，4】的这种情况去除掉只留一个（毕竟我们是从头到尾的遍历arr数组了）
        return num;
    }
}